Rem Isometric Camera Example
Rem Written By Jason Clogg

h=d3d_get_desktop_height()
w=d3d_get_desktop_width()
d=d3d_get_desktop_depth()
set display mode w,h,d
sync on
autocam off

d3d_init
color backdrop 0,0
make camera 1:color backdrop 1,0
make camera 2:color backdrop 2,0
make camera 3:color backdrop 3,0

set camera view 0,0,0,w/2,h/2
set camera view 1,w/2,0,w,h/2
set camera view 2,0,h/2,w/2,h
set camera view 3,w/2,h/2,w,h

D3D_Font 1,"Arial",10,0,0,1
D3D_Font 2,"Arial",9,0,0,1

D3D_MAKE_3DTEXT 1, 1, "Isometric", .5, 2, 1

D3D_MAKE_TEAPOT 2

position camera 0,0,0,-10:point camera 0,0,0,0
position camera 1,0,10,0:point camera 1,0,0,0
position camera 2,10,0,0:point camera 2,0,0,0
position camera 3,0,5,-10:point camera 3,0,0,0
d3d_set_ortho_projection 0,10
d3d_set_ortho_projection 1,10
d3d_set_ortho_projection 2,10

angle#=0

title$="Perspective"
ShowIsometric=0
clicking=0

do

d3d_line w/2,0,w/2,h,d3d_rgba(255,255,255,255)
d3d_line 0,h/2,w,h/2,d3d_rgba(255,255,255,255)

rem Find out which camera view the cursor is in

CurrentCam=D3D_CURSOR_IN_CAMERA(0,4)

D3D_PICK_CAMERA CurrentCam, MouseX(), MouseY(),0

x1#=D3D_CAMERA_VECTOR_X()
y1#=D3D_CAMERA_VECTOR_Y()
z1#=D3D_CAMERA_VECTOR_Z()

D3D_PICK_CAMERA CurrentCam, MouseX(), MouseY(),500

x2#=D3D_CAMERA_VECTOR_X()
y2#=D3D_CAMERA_VECTOR_Y()
z2#=D3D_CAMERA_VECTOR_Z()

PickObject#=Intersect object(1,x1#,y1#,z1#,x2#,y2#,z2#)

if mouseclick()=1 and CurrentCam=3
   if clicking=0
      clicking=1
      if ShowIsometric=0
         title$="Isometric"
         d3d_set_ortho_projection 3,10
         ShowIsometric=1
      else
         title$="Perspective"
         d3d_reset_camera 3
         ShowIsometric=0
      endif
   endif
else
   clicking=0
endif

d3d_startText
   D3D_GET_CAMERA_NORMAL 0
   d3d_text 1,1,2,0,"Front - Camera Normal= (" + str$(D3D_CAMERA_VECTOR_X()) + "," + str$(D3D_CAMERA_VECTOR_Y()) + "," + str$(D3D_CAMERA_VECTOR_Z()) + ")"
   D3D_GET_CAMERA_NORMAL 1
   d3d_text 1,w/2+2,0,0,"Top - Camera Normal= (" + str$(D3D_CAMERA_VECTOR_X()) + "," + str$(D3D_CAMERA_VECTOR_Y()) + "," + str$(D3D_CAMERA_VECTOR_Z()) + ")"
   D3D_GET_CAMERA_NORMAL 2
   d3d_text 1,1,h/2+1,0,"Left - Camera Normal= (" + str$(D3D_CAMERA_VECTOR_X()) + "," + str$(D3D_CAMERA_VECTOR_Y()) + "," + str$(D3D_CAMERA_VECTOR_Z()) + ")"
   D3D_GET_CAMERA_NORMAL 3
   d3d_text 1,w/2+1,h/2+1,0,title$ + " - Camera Normal= (" + str$(D3D_CAMERA_VECTOR_X()) + "," + str$(D3D_CAMERA_VECTOR_Y()) + "," + str$(D3D_CAMERA_VECTOR_Z()) + ")"
   d3d_text 1,w,2,2,"Current Camera=" + str$(CurrentCam)
   d3d_text 1,w,25,2,"Cursor on Object 1=" + str$(PickObject#)
   d3d_text 1,w,48,2,"FPS=" + str$(screen fps())
   d3d_text 2,w,h-15,2,"Isometric Camera examples by Jason Clogg"
d3d_endtext

select CurrentCam
   case 0
      DrawBox(0,0,w/2,h/2, rgb(255,0,0))
   endcase
   case 1
      DrawBox(w/2,0,w-1,h/2, rgb(255,0,0))
   endcase
   case 2
      DrawBox(0,h/2,w/2,h-1, rgb(255,0,0))
   endcase
   case 3
      DrawBox(w/2,h/2,w-1,h-1, rgb(255,0,0))
   endcase
endselect

position object 2,sin(angle#)*3,0,cos(angle#)*3
angle#=wrapvalue(angle#-.1)

turn object right 1,.1
sync
loop
end

function DrawBox( x1, y1, x2, y2, color)

d3d_line x1,y1,x2,y1,color
d3d_line x1,y1,x1,y2,color
d3d_line x2,y1,x2,y2,color
d3d_line x1,y2,x2,y2,color

endfunction